菜 292(E)
中 319(D) 777(B+)
危
今天就算是娱乐专场了。三道脑筋急转弯。
加餐:zip函数()
292. Nim游戏(E)
分析:额。一开始有点懵,这道题要考什么啊。转弯转在哪里啊。想到了4这个数,加个判断就完成了。
1 | class Solution: |
319. 灯泡开关(D)
分析:这道题,有点意思。需要考虑到开关状态跟因子数相关。
(1)第i轮时,被切换的灯泡位置是i的倍数。
(2)由(1)得出,对于第p个灯泡来说,只有其第“因子”轮才会切换,若其有q个因子,则最终被切换q次。因为初始状态是关闭状态,那么因子数是奇数的灯泡最终是亮着的。
(3)只有平方数的因子个数不是成对出现,举例:4=1*4,2*2,其因子是1,2,4。
(4)那么题目最终转化为1~n里平方数的个数,进而转化为对n开平方根,向下取整即可。
1 | class Solution: |
777. 在LR字符串中交换相邻字符(B+)
L只能跨越X左移,R只能跨越X又移,LR相互之间不可以移动
用两个计数单位分别记录,LX和XR XL和RX。一个正一个负,来比较抵消。
需要注意的是,使用到了zip()函数,扩展在下面。
1 | class Solution: |
zip()函数的使用
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
zip(zipped) # 与 zip 相反,zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
1
2
3
4
5
6
7
8
9
10 >>>nums = ['flower','flow','flight']
>>>for i in zip(*nums):
>>> print(i)
>>>
>>>>>
>>>('f', 'f', 'f')
>>>('l', 'l', 'l')
>>>('o', 'o', 'i')
>>>('w', 'w', 'g')
>>>